java8 根据指定属性过滤两个list集合中相同的元素 并返回相同list集合

您所在的位置:网站首页 java两个list取交集 根据两个字段 java8 根据指定属性过滤两个list集合中相同的元素 并返回相同list集合

java8 根据指定属性过滤两个list集合中相同的元素 并返回相同list集合

2024-07-10 14:30| 来源: 网络整理| 查看: 265

Java8流处理方式

Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。

Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。

Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。

这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。

元素流在管道中经过中间操作(intermediate operation)的处理,最后由最终操作(terminal operation)得到前面处理的结果。

核心处理

根据姓名和年纪来进行过滤

List same = allData.stream() .map(t -> excelData .stream() .filter(s -> Objects.nonNull(t.getName()) && Objects.nonNull(s.getName()) && Objects.equals(t.getName(), s.getName()) && Objects.nonNull(t.getAge()) && Objects.nonNull(s.getAge()) && Objects.equals(t.getAge(), s.getAge()) ) .findAny() .orElse(null)) .filter(Objects::nonNull) .map(r->r.getRowIndex()) .collect(Collectors.toList());

具体详见后续说明

Demo实体类 public class Demo { private String id; private String name; private String age; private String rowIndex; public Demo() { } public Demo(String id, String name, String age, String rowIndex) { this.id = id; this.name = name; this.age = age; this.rowIndex = rowIndex; } @Override public String toString() { return "Demo{" + "id='" + id + '\'' + ", name='" + name + '\'' + ", age='" + age + '\'' + ", rowIndex='" + rowIndex + '\'' + '}'; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } public String getRowIndex() { return rowIndex; } public void setRowIndex(String rowIndex) { this.rowIndex = rowIndex; } } 测试类 ```java @Test void testA(){ List allData = Arrays.asList( new Demo("1", "张三","20",null), new Demo("2", "李四","20",null), new Demo("3", "王五","25",null), new Demo("3", "小白","26",null), new Demo("3", "小白","25",null), new Demo("4", "赵六","26",null)); System.out.println("相同的人姓名集合:" + allData); List excelData = Arrays.asList( new Demo( null,"张三","20","20"), new Demo(null,"李四","21","21"), new Demo( null,"小红","25","22"), new Demo( null,"小白","26","23")); System.out.println("相同的人姓名集合:" + excelData); List same = allData.stream() .map(t -> excelData .stream() .filter(s -> Objects.nonNull(t.getName()) && Objects.nonNull(s.getName()) && Objects.equals(t.getName(), s.getName()) && Objects.nonNull(t.getAge()) && Objects.nonNull(s.getAge()) && Objects.equals(t.getAge(), s.getAge()) ) .findAny() .orElse(null)) .filter(Objects::nonNull) .map(r->r.getRowIndex())//如需获取重复对象,将此行进行注释,改用对象集合接收 .collect(Collectors.toList()); System.out.println("TheSameList集合:" + same);


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3